たるだめ

のんびりとなんか書きます

tsconfig.jsonのエイリアスが効かず、実行時に「Cannot find module」となる

状況

serverless framework + Typescript で AWS Lambda の関数を作成。

デプロイして実行したときに以下のエラーが発生。

{
    "errorType": "Runtime.ImportModuleError",
    "errorMessage": "Error: Cannot find module '@lib/utils/logger'\nRequire stack:\n- /var/task/src/app/handlers/api/hoge.js\n- /var/runtime/UserFunction.js\n- /var/runtime/Runtime.js\n- /var/runtime/index.js",
    "stack": [
        "Runtime.ImportModuleError: Error: Cannot find module '@lib/utils/logger'",
        "Require stack:",
        "- /var/task/src/app/handlers/api/hoge.js",
        "- /var/runtime/UserFunction.js",
        "- /var/runtime/Runtime.js",
        "- /var/runtime/index.js",
        "    at _loadUserApp (/var/runtime/UserFunction.js:221:13)",
        "    at Object.module.exports.load (/var/runtime/UserFunction.js:279:17)",
        "    at Object.<anonymous> (/var/runtime/index.js:43:34)",
        "    at Module._compile (internal/modules/cjs/loader.js:1085:14)",
        "    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10)",
        "    at Module.load (internal/modules/cjs/loader.js:950:32)",
        "    at Function.Module._load (internal/modules/cjs/loader.js:790:12)",
        "    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:75:12)",
        "    at internal/main/run_main_module.js:17:47"
    ]
}

tsconfig.json の paths にエイリアスを定義している

{
  "compilerOptions": {
    /** ~省略~ */
    "paths": {
      "@lib": ["./src/lib"]
    },
  }
}

解決方法

tsconfing-paths-webpack-pluginwebpack.config.jsに追加

余談

今回の問題は、結果的に上記の解決方法でよかったのだが、serverless に webpack を追加したことによってまた別の問題発生し結構ハマるのであった・・・